package com.learn.springbootnetty.udpdemo;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 UDP协议接收数据
 */
public class ReceiveMessageDemo2 {
    public static void main(String[] args) throws Exception {

        // 1.创建接收端的DatagramSocket对象(快递公司)
        // 细节:
        //     在接收的时候,一定要手动绑定端口
        //     而且绑定的端口一定要跟发送的端口保持一致
        DatagramSocket ds = new DatagramSocket(10086);


        // 创建字节数组用来保存接收过来的信息
        byte[] bytes = new byte[1024];
        // 2.数据包,存储接收到的数据  接收数据只需要给它传递一个数组就可以了
        DatagramPacket dp = new DatagramPacket(bytes,bytes.length);

        // 3.接收数据包
        // 该方法是阻塞的
        // 程序执行到这一步的时候,会在这里死等
        // 等发送端发送消息
        ds.receive(dp);

        // 4.解析数据包
        byte[] data = dp.getData();
        // System.out.println(data.length); // 1024
        int len = dp.getLength();
        // 获取发送端的IP
        //  System.out.println(dp.getSocketAddress()); // /127.0.0.1:50167
        InetAddress address = dp.getAddress();
        // 获取发送端的端口号
        int port = dp.getPort();

        System.out.println("接收到数据:" + new String(data,0,len));
        System.out.println("该数据是从" + address + "这台电脑中的" + port + "这个端口发出的");

        // 5.释放资源
        ds.close();
    }
}